package org.nekperu15739.aboutme.persistenceservice.dao.interfaces.i18n;

import java.util.List;

import org.nekperu15739.aboutme.persistencemodel.domain.abstracts.EntityAbstract;
import org.nekperu15739.aboutme.persistencemodel.domain.implementation.i18n.Language;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
 * @author charly
 * 
 * http://docs.spring.io/spring-data/jpa/docs/1.5.1.RELEASE/reference/html/jpa.repositories.html
	
	Table 2.3. Supported keywords inside method names
	
	Keyword    			Sample    													JPQL snippet
	And        			findByLastnameAndFirstname    								… where x.lastname = ?1 and x.firstname = ?2
	Or        			findByLastnameOrFirstname    								… where x.lastname = ?1 or x.firstname = ?2
	Is,Equals    		findByFirstname,findByFirstnameIs,findByFirstnameEquals    	… where x.firstname = 1?
	Between    			findByStartDateBetween    									… where x.startDate between 1? and ?2
	LessThan    		findByAgeLessThan   				 						… where x.age < ?1
	LessThanEqual    	findByAgeLessThanEqual    									… where x.age <= ?1
	GreaterThan    		findByAgeGreaterThan    									… where x.age > ?1
	GreaterThanEqual    findByAgeGreaterThanEqual    								… where x.age >= ?1
	After    			findByStartDateAfter    									… where x.startDate > ?1
	Before    			findByStartDateBefore    									… where x.startDate < ?1
	IsNull    			findByAgeIsNull    											… where x.age is null
	IsNotNull,NotNull    findByAge(Is)NotNull    									… where x.age not null
	Like    			findByFirstnameLike    										… where x.firstname like ?1
	NotLike    			findByFirstnameNotLike    									… where x.firstname not like ?1
	StartingWith    	findByFirstnameStartingWith    								… where x.firstname like ?1 (parameter bound with appended %)
	EndingWith    		findByFirstnameEndingWith    								… where x.firstname like ?1 (parameter bound with prepended %)
	Containing    		findByFirstnameContaining    								… where x.firstname like ?1 (parameter bound wrapped in %)
	OrderBy    			findByAgeOrderByLastnameDesc    							… where x.age = ?1 order by x.lastname desc
	Not    				findByLastnameNot    										… where x.lastname <> ?1
	In    				findByAgeIn(Collection<Age> ages)    						… where x.age in ?1
	NotIn    			findByAgeNotIn(Collection<Age> age)    						… where x.age not in ?1
	True    			findByActiveTrue()    										… where x.active = true
	False    			findByActiveFalse()    										… where x.active = false
	IgnoreCase    		findByFirstnameIgnoreCase    								… where UPPER(x.firstame) = UPPER(?1)
 *
 */
public interface LanguageDao extends JpaRepository<Language, Integer> {

	List<Language> findByLanguage(String language);

	@Query("select l from Language l where l.language = ?1")
	Language selectByLanguage(String language);

	@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true)
	Language findByEmailAddress(String emailAddress);

	@Query("select u from Language u where u.language = :language")
	Language findByLastnameOrFirstname(
	        @Param("language") String lastname);
}
